package com.gzsxy.esjy.service.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gzsxy.esjy.service.base.dto.request.ProductRequest;
import com.gzsxy.esjy.service.base.dto.response.PageResult;
import com.gzsxy.esjy.service.base.dto.response.ProductRsp;
import com.gzsxy.esjy.service.product.entity.Product;
import com.gzsxy.esjy.service.product.entity.vo.ApiProductQueryVo;
import com.gzsxy.esjy.service.product.entity.vo.ProductQueryVo;

import java.util.List;

/**
 * @description: 商品管理
 * @param
 * @return
 */
public interface ProductService extends IService<Product> {

    /**
     * @description: 分页查询
     * @param pageParam
     * @return
     */
    PageResult<ProductRsp> selectPage(IPage<Product> pageParam, ProductQueryVo productQueryVo);

    /**
     * @description: 添加商品
     * @param
     * @return
     */
    void addProduct(ProductRequest productRequest);

    /**
     * @description: 更新商品
     * @param
     * @return
     */
    void updateProduct(ProductRequest productRequest);

    /**
     * @description: 删除商品
     * @param
     * @return
     */
    void deleteProduct(String id);

    /**
     * @description: 修改发布状态
     * @param id 商品id
     * @param publishStatus 发布状态
     * @return
     */
    void publishById(String id, Integer publishStatus);


    /**
     * @description: 根据不同类型查询商品列表
     * @param type 类型 1热卖；2特价;3新品
     * @return
     */
    List<ProductRsp> getApiProductByQuery(Integer type);

    /**
     * @description: 首页查询商品详情
     * @param
     * @return
     */
    ProductRsp getProductById(String id);

    /**
     * @description: 根据查询对象查询指定商品
     * @param
     * @return
     */
    List<ProductRsp> getProductByType(ApiProductQueryVo apiProductQueryVo);

    /**
     * @description: 根据商品id查询商品(外部服务调用)
     * @param
     * @return
     */
    ProductRsp getProById(String id);

    /**
     * @description: 更新商品库存（外部服务调用）
     * @param
     * @return
     */
    void editNumber(String id, Integer number);
}
